<?php
/**
 * 模块: 权限菜单管理
 * User: 文丹
 * Date: 2018/1/23
 * Time: 17:00
 */
namespace app\admin\model;
use think\Model;
use think\Db;
class Menu extends Model{
    /**
     * 查询全部 - 权限菜单 - 分页
     */
    public function select(){
        return Db::name('menu')->order('id desc')->paginate(10,false,['query'=>request()->param()])->each(function($item,$key){
            $item['item_name'] = Db::name('item')->where('id',$item['item_id'])->value('item_name');
            return $item;
        });
    }
    public function count(){
        return Db::name('menu')->count();
    }

    /**
     * 查询全部 菜单
     * @return false|mixed|\PDOStatement|string|\think\Collection
     */
    public function getMenus(){
        return Db::name('menu')
            ->alias('m')
            ->join('item i','m.item_id = i.id')
            ->field('m.id,m.name,m.item_id,i.item_name')
            ->select();
    }
    public function menusSurplus($menu_ids){
        return Db::name('menu')
            ->alias('m')
            ->join('item i','m.item_id = i.id')
            ->whereNotIn('m.id',$menu_ids)
            ->field('m.id,m.name,m.item_id,i.item_name')
            ->select();
    }
    /**
     *  权限菜单添加
     * @param array|mixed $data
     */
    public function insert($data){
        return Db::name('menu')->insert($data);
    }

    /**
     * 权限菜单 - 停用
     * @param $id
     * @return int|string
     */
    public function menuStop($id){
        return Db::name('menu')->where('id',$id)->update(['state'=>2]);
    }

    /**
     *  权限菜单 - 启用
     * @param $id
     * @return int|string
     */
    public function menuStart($id){
        return Db::name('menu')->where('id',$id)->update(['state'=>1]);
    }

    /**
     *  权限菜单 - 单个删除
     * @param $id
     * @return int
     */
    public function menuDel($id){
        return Db::name('menu')->where('id',$id)->delete();
    }

    /**
     * 查询单个 - 权限菜单
     * @param array|\Closure|null|string|\think\db\Query $id
     * @return array|false|mixed|\PDOStatement|string|Model
     */
    public function find($id){
        return Db::name('menu')->where('id',$id)->find();
    }

    /**
     * 菜单 - 更新
     * @param $data
     * @param $id
     * @return int|string
     */
    public function menuEdit($data,$id){
        return Db::name('menu')->where('id',$id)->update($data);
    }

    /**
     * @param $id：根据栏目id 查询菜单
     * @return array|false|mixed|\PDOStatement|string|Model
     */
    public function queryMenu($id){
        return Db::name('menu')->where('item_id',$id)->select();
    }

    /**
     * 按栏目id搜索
     * @param $item_id
     * @return $this
     */
    public function searchItemId($item_id){
        return Db::name('menu')
            ->where('item_id',$item_id)
            ->paginate(10,false,['query'=>request()->param()])->each(function($item,$key){
            $item['item_name'] = Db::name('item')->where('id',$item['item_id'])->value('item_name');
            return $item;
        });
    }
    public function countItemId($item_id){
        return Db::name('menu')
            ->where('item_id',$item_id)
            ->count();
    }

    /**
     * @param $item_id
     */
    public function findItemId($item_id){
        return Db::name('menu')
            ->where('item_id',$item_id)
            ->find();
    }

    /**
     * 按菜单名搜索
     * @param $name
     * @return $this
     */
    public function searchName($name){
        return Db::name('menu')
            ->where('name','like','%'.$name.'%')
            ->paginate(10,false,['query'=>request()->param()])->each(function($item,$key){
                $item['item_name'] = Db::name('item')->where('id',$item['item_id'])->value('item_name');
                return $item;
            });
    }
    public function countName($name){
        return Db::name('menu')
            ->where('name','like','%'.$name.'%')
            ->count();
    }

    /**
     * 按菜单地址搜索
     * @param $url
     * @return $this
     */
    public function searchUrl($url){
        return Db::name('menu')
            ->where('url','like','%'.$url.'%')
            ->paginate(10,false,['query'=>request()->param()])->each(function($item,$key){
                $item['item_name'] = Db::name('item')->where('id',$item['item_id'])->value('item_name');
                return $item;
            });
    }
    public function countUrl($url){
        return Db::name('menu')
            ->where('url','like','%'.$url.'%')
            ->count();
    }

    /**
     * 根据菜单名 查询 - 验证
     * @param $name
     * @return array|false|mixed|\PDOStatement|string|Model
     */
    public function checkName($name){
        return Db::name('menu')->where('name',$name)->find();
    }

    /**
     * 根据地址 查询
     * @param $url
     * @return array|false|mixed|\PDOStatement|string|Model
     */
    public function checkUrl($url){
        return Db::name('menu')->where('url',$url)->find();
    }

    /**
     * 根据菜单名 查询 - 验证(除去本身)
     * @param $name
     * @param $menu_id
     * @return array|false|mixed|\PDOStatement|string|Model
     */
    public function checkNameX($name,$menu_id){
        return Db::name('menu')->where('name',$name)->whereNotIn('id',$menu_id)->find();
    }

    /**
     * 根据地址 查询(除去本身)
     * @param $url
     * @param $menu_id
     * @return array|false|mixed|\PDOStatement|string|Model
     */
    public function checkUrlX($url,$menu_id){
        return Db::name('menu')->where('url',$url)->whereNotIn('id',$menu_id)->find();
    }




}